///////////////////////////////////////////////////////////////////////////
//																		 //
//	Author:		Michael Mozdzierz										 //
//	Date:		10/22/2014												 //
//	Purpose:	Command console used for debugging game issues			 //
//																		 //
///////////////////////////////////////////////////////////////////////////
#ifndef _CONSOLE_H
#define _CONSOLE_H

#include <map>
#include "Delegate.h"
#include <string>

typedef void(*console_event)(void**);

using namespace std;

class Console
{
	struct line_info
	{
		string line;

		Vector4 color;
	};
	
	vector<line_info> buffer_info;
	map<string, Delegate<console_event>> commands;

	bool visible = false;

	float sameKeyTimer;
	// value that 'sameKeyTimer' uses when it's reset
	const float keyTimerReset = 3.f;

	Console(void);
	~Console(void);
public:

	bool isVisible(void) const { return visible; }

	void Show(void);
	void Hide(void);
	void Update(float dt);
	void Draw(void);
	void WriteLine(const char* line, Vector4& color);
	void SubscribeToString(const char* name, console_event callback);

	static Console* GetInstance(void);
};

#endif